﻿Imports Proyecto_PAVI_Academia.AccesoBD
Public Class frm_ABM_Examenes
    Enum estado
        insertar
        modificar
        eliminar
    End Enum
    Dim accion As New estado

    Dim acceso As New AccesoBD

    Dim curso As String 'para guardar el id de la columna seleccionada de cursos

    Dim fecha_anterior As String = "" 'para cuando modifico una fecha

    Dim notas As New frm_ABM_NotasExamen

    Private Sub frm_ABM_Examenes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.gridDatosExamen.Enabled = False
        Me.gridDatosExamen.Focus()
        Me.gridExamenes.Enabled = False
        btnNuevo.Enabled = False
        btnGuardar.Enabled = False
        btnCancelar.Enabled = False
        btnRefrescar.Enabled = True

        cargarGrillaCursos()
    End Sub
    Private Sub cargarGrillaCursos()
        Dim comando As String
        Dim tabla As DataTable

        comando = "select c.idCurso, t.nombre, c.fechaInicio from Cursos c inner join TipoCurso t on (c.idTipoCurso=t.idTipoCurso) where c.estado=0"

        'este metodo devuelve una tabla formada con el comando que le pase por parametro
        tabla = acceso.ejecutaSQL(comando)
        grillaCursos.Rows.Clear()
        Dim c As Integer
        For c = 0 To tabla.Rows.Count - 1
            Me.grillaCursos.Rows.Add(tabla.Rows(c)("idCurso"), tabla.Rows(c)("nombre"), tabla.Rows(c)("fechaInicio"))
        Next
        grillaCursos.ClearSelection()
    End Sub
    Private Sub cargarGrillaExamenes()
        Dim comando As String
        Dim tabla As DataTable

        comando = "select e.idCurso, e.fechaInicioCurso, e.fechaExamen, t.nombre from Examenes e, Cursos c, TipoCurso t where c.idCurso=" & Integer.Parse(curso) & " and e.idCurso=c.idCurso and e.fechaInicioCurso=c.fechaInicio and c.idTipoCurso=t.idTipoCurso"
        tabla = acceso.ejecutaSQL(comando)
        grillaExámenes.Rows.Clear()
        Dim c As Integer
        For c = 0 To tabla.Rows.Count - 1
            Me.grillaExámenes.Rows.Add(tabla.Rows(c)("fechaExamen"), tabla.Rows(c)("idCurso"), tabla.Rows(c)("nombre"), tabla.Rows(c)("fechaInicioCurso"))
        Next
        Me.grillaExámenes.ClearSelection()
    End Sub

    
    Private Sub grillaCursos_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grillaCursos.SelectionChanged
        If grillaCursos.SelectedRows.Count > 0 Then
            curso = grillaCursos.Item("id", grillaCursos.SelectedRows(0).Index).Value
            btnNuevo.Enabled = True
            cargarGrillaExamenes()
            Me.gridExamenes.Enabled = True
        End If
    End Sub
    Private Sub grillaExámenes_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grillaExámenes.SelectionChanged
        If Me.grillaExámenes.SelectedRows.Count > 0 Then
            fecha_anterior = grillaExámenes.Item("fechaExamen", grillaExámenes.SelectedRows(0).Index).Value
        End If
    End Sub
    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
        accion = estado.insertar
        Me.gridDatosExamen.Enabled = True
        Me.txt_fecha_examen.Focus()
        cargarDatosCurso()
        Me.btnGuardar.Enabled = True
    End Sub

    Private Sub limpiarCampos()
        Dim miControl As Object

        For Each miControl In Me.gridDatosExamen.Controls
            If miControl.GetType Is GetType(System.Windows.Forms.TextBox) Then
                miControl.Clear()
            End If
            If miControl.GetType Is GetType(System.Windows.Forms.MaskedTextBox) Then
                miControl.Clear()
            End If
        Next
    End Sub
    Private Sub txt_fecha_examen_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt_fecha_examen.Validated
        If (IsDate(txt_fecha_examen.Text)) = False Then
            MsgBox("Fecha errónea")
            txt_fecha_examen.Focus()
            Exit Sub
        End If
        If DateTime.Parse(txt_fecha_examen.Text) < DateTime.Now.Date = True Then
            MsgBox("La fecha no puede ser menor a la de hoy!")
            txt_fecha_examen.Focus()
            Exit Sub
        End If
        'Compare funciona asi
        'Less than zero t1 is earlier than t2.
        'Zero() t1 is the same as t2.
        'Greater than zero t1 is later than t2.
        If DateTime.Compare(DateTime.Parse(Me.txt_fecha_curso.Text), DateTime.Parse(txt_fecha_examen.Text)) > 0 Then
            MsgBox("La fecha del exámen no puede ser menor a la de inicio del curso")
            Me.txt_fecha_examen.Focus()
            Exit Sub
        End If
    End Sub
    Private Sub cargarDatosCurso()
        limpiarCampos()
        Dim tabla As DataTable = acceso.devuelveTabla("Cursos c, TipoCurso t where c.idCurso=" & Integer.Parse(curso) & " and c.idTipoCurso=t.idTipoCurso")
        Dim fila As DataRow = tabla.Rows(0)
        Me.txt_id.Text = fila("idCurso")
        Me.txt_tipo.Text = fila("nombre")
        Me.txt_fecha_curso.Text = CStr(fila("fechaInicio"))
    End Sub
    Private Sub cargarDatosCurso_Examen()
        limpiarCampos()
        Dim comando As String
        comando = "Cursos c, TipoCurso t, Examenes e where e.idCurso=" & Integer.Parse(curso)
        comando &= " and e.fechaExamen='" & DateTime.Parse(Me.fecha_anterior)
        comando &= "' and c.idTipoCurso=t.idTipoCurso and e.idCurso=c.idCurso and e.fechaInicioCurso=c.fechaInicio"

        Dim tabla As DataTable = acceso.devuelveTabla(comando)
        Dim fila As DataRow = tabla.Rows(0)
        Me.txt_id.Text = fila("idCurso")
        Me.txt_tipo.Text = fila("nombre")
        Me.txt_fecha_curso.Text = CStr(fila("fechaInicio"))
        Me.txt_fecha_examen.Text = CStr(fila("fechaExamen"))
    End Sub
    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        limpiarCampos()
        Me.gridDatosExamen.Enabled = False
        Me.gridExamenes.Enabled = False
        Me.btnCancelar.Enabled = False
        Me.btnGuardar.Enabled = False
    End Sub

    Private Sub btnRefrescar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRefrescar.Click
        limpiarCampos()
        Me.gridDatosExamen.Enabled = False
        Me.gridExamenes.Enabled = False
        Me.btnCancelar.Enabled = False
        Me.cargarGrillaCursos() 'para que vuelva a 0 la seleccion de filas de la grilla
    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        Dim comando As String
        If accion = estado.insertar Then
            comando = "insert into Examenes values(" & Me.txt_id.Text & ",'" & Me.txt_fecha_curso.Text & "','"
            comando &= Me.txt_fecha_examen.Text & "')"
            acceso._insertar(comando)
            MsgBox("Exámen cargado con éxito!")
        End If
        ' para las modificaciones de fecha de examen, agregué en la tabla, que se modifiquen todos los detalles,
        'lo hace la misma base, entonces aca no tocamos nada
        If accion = estado.modificar Then
            comando = "update Examenes set fechaExamen='" & DateTime.Parse(Me.txt_fecha_examen.Text) & "' where idCurso="
            comando &= curso & " and fechaExamen='" & DateTime.Parse(Me.fecha_anterior) & "'"
            acceso._modificar(comando)
        End If
        'Para el caso de eliminaciones, vamos a hacer que no elimine, si hay detalles de examen, para ese examen 
        If accion = estado.eliminar Then
            If buscarDetalleExamenes() Then
                MsgBox("No se puede eliminar el exámen, existen notas cargadas para el mismo!")
                Exit Sub
            End If
            comando = "delete Examenes where idCurso=" & curso & " and fechaExamen='"
            comando &= DateTime.Parse(Me.txt_fecha_examen.Text) & "'"
            acceso._eliminar(comando)
        End If
        cargarGrillaExamenes()
        btnGuardar.Enabled = False
        btnCancelar.Enabled = False
        limpiarCampos()
        Me.grillaExámenes.Focus()
        Me.gridDatosExamen.Enabled = False
    End Sub
    Private Function buscarDetalleExamenes() As Boolean
        Dim tabla As DataTable
        Dim comando As String
        comando = "Examenes e, DetalleExamenes de where e.idCurso=" & Me.txt_id.Text & " and e.fechaInicioCurso='"
        comando &= DateTime.Parse(Me.txt_fecha_curso.Text) & "' and e.fechaExamen='" & DateTime.Parse(Me.txt_fecha_examen.Text) & "' and "
        comando &= "e.idCurso=de.idCurso and e.fechaInicioCurso=de.fechaInicioCurso and e.fechaExamen=de.fechaExamen"
        tabla = acceso.devuelveTabla(comando)
        If tabla.Rows.Count > 0 Then
            Return True
        End If
        Return False
    End Function
    Private Sub ModificarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModificarToolStripMenuItem.Click
        accion = estado.modificar
        gridDatosExamen.Enabled = True
        cargarDatosCurso_Examen()
        btnCancelar.Enabled = True
        btnGuardar.Enabled = True
        Me.txt_fecha_examen.Focus()
        btnNuevo.Enabled = False
    End Sub

    Private Sub EliminarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem.Click
        If MessageBox.Show("Esta seguro que desea eliminar el registro?!", "Eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            accion = estado.eliminar
            gridDatosExamen.Enabled = True
            cargarDatosCurso_Examen()
            btnCancelar.Enabled = True
            btnGuardar.Enabled = True
            Me.txt_fecha_examen.Enabled = False
            btnGuardar.Focus()
            btnNuevo.Enabled = False
        End If
    End Sub

    Private Sub CargarNotasToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CargarNotasToolStripMenuItem.Click
        Me.cargarDatosCurso_Examen()
        notas.txt_id.Text = Me.txt_id.Text
        notas.txt_tipo.Text = Me.txt_tipo.Text
        notas.txt_fecha_curso.Text = Me.txt_fecha_curso.Text
        notas.txt_fecha_examen.Text = Me.txt_fecha_examen.Text
        'aca hay q comprobar que haya alumnos inscriptos al curso antes de entrar
        If buscarInscriptos() = False Then
            MsgBox("No hay alumnos inscriptos en el curso al que corresponde este exámen")
        Else
            notas.Show()
        End If

    End Sub
    Private Function buscarInscriptos() As Boolean
        Dim consulta As String
        consulta = "select legajoAlumno from CuotasXAlumno where idCurso=" & Integer.Parse(Me.txt_id.Text)
        consulta &= " and fechaInicio='" & DateTime.Parse(Me.txt_fecha_curso.Text) & "'"
        Dim tabla = acceso.ejecutaSQL(consulta)
        If tabla.Rows.Count = 0 Then
            Return False
        End If
        Return True
    End Function
    Private Sub btnVolver_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVolver.Click
        Me.Close()
    End Sub
End Class